/**
  *@File文件:BillService.java
  *@Date日期:2017年7月17日 上午9:42:16
  *@Copyright版权:Corporation 2017
  */
package com.qiaomengapp.service;

import java.util.List;
import com.qiaomengapp.bean.Bill;
import com.qiaomengapp.bean.BillAndBillGoodWrapper;
import com.qiaomengapp.bean.BillDetailMessage;
import com.qiaomengapp.bean.Provider;
import com.qiaomengapp.exception.CustomException;

/**
 * @Description描述: 订单逻辑处理类
 * @Author作者 wangzongwen
 * @Date日期:2017年7月17日
 */
/**
 * @Description描述:
 * @Author作者 wangzongwen
 * @Date日期:2017年7月17日
 */
public interface IBillManageService {
	/**
	 * @Description描述: 创建订单
	 * @param billAndBillGoodWrappers
	 *            订单和订单商品的包装类数组
	 * @throws CustomException
	 * @return void
	 */
	void insertBill(BillAndBillGoodWrapper billAndBillGoodWrapper) throws CustomException ;

	/**
	 * @Description描述: 订单付款
	 * @param userId
	 *            付款的用户id
	 * @param billCode
	 *            订单编号
	 * @param cardCode
	 *            银行卡编号
	 * @throws CustomException
	 * @return void
	 */
	void updatePayment(int userId, String billCode, long cardCode) throws CustomException ;
	/**
	 * @Description描述: 用户收货
	 * @param billCode
	 *            订单编号
	 * @return void
	 * @throws CustomException
	 */
	void updateAcceptBillGood(String billCode) throws CustomException ;

	/**
	 * @Description描述: 订单完成
	 * @param billCode
	 *            完成的订单编号
	 * @throws CustomException
	 * @return void
	 */
	void updateBillComplete(String billCode) throws CustomException ;

	/**
	 * @Description描述: 用户退款订单
	 * @param billCode
	 *            订单编号
	 * @return void
	 * @throws CustomException
	 */
	void updateBillRefund(String billCode) throws CustomException ;
	
	/**
	 *@Description描述: 根据订单状态查询订单
	 *@param status 订单状态
	 *@param userId 查询订单的用户
	 *@return
	 *@return List<Bill> 符合条件的订单集合
	 */
	List<Bill> selectBillByStatus(Integer status,int userId);
	
	/**
	 *@Description描述: 通过订单编号查询订单详情
	 *@param billCode 要查询的订单编号
	 *@return
	 *@return List<BillDetailMessage> 查询到的订单详情集合
	 */
	List<BillDetailMessage> selectBillDetailByBillCode(String billCode);
	
	
	/**
	 *@Description描述: 通过订单编号查询商家订单详情
	 *@param billCode 要查询的订单编号
	 *@return
	 *@return List<BillDetailMessage> 查询到的订单信息集合
	 */
	List<BillDetailMessage> selectDistributionBillByBillCode(String billCode);
	
	/**
	 *@Description描述: 根据订单编号查询供应商信息
	 *@param billCode 要查询的订单编号
	 *@return
	 *@return Provider 供应商信息
	 */
	Provider selectProviderByBillCode(String billCode);
	
	/**
	 *@Description描述: 根据订单编号查询订单
	 *@param billCode 订单编号
	 *@return 
	 *@return Bill 查询到的订单
	 */
	Bill selectBillByCode(String billCode);
}
